package collection;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author: feiwang_6
 * @create: 2020/7/2 18:10
 * @description: 扩展一下LinkedHashMap这个类，让他实现LRU算法
 */
public class LRULinkedHashMap<K, V> extends LinkedHashMap<K, V> {
    private static final long serialVersionUID = 1L;
    //定义缓存的容量
    private int capacity;

    //带参数的构造器	
    public LRULinkedHashMap(int capacity) {
        //调用LinkedHashMap的构造器，传入以下参数
        super(16, 0.75f, true);
        //传入指定的缓存最大容量
        this.capacity = capacity;
    }

    //实现LRU的关键方法，如果map里面的元素个数大于了缓存最大容量，则删除链表的顶端元素
    @Override
    public boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        System.out.println(eldest.getKey() + " = " + eldest.getValue());
        return size() > capacity;
    }
    
    public static void main(String[] args) {
        LRULinkedHashMap<Integer, Integer> lru = new LRULinkedHashMap<>(4);
        lru.put(10, 10);
        lru.put(11, 11);
        lru.put(12, 12);
        lru.put(13, 13);
        lru.put(18, 18);
        System.out.println(lru.entrySet());
    }
}
